package cn.kgc.tangcco.tcbd1011.no13.base.util;

import java.lang.reflect.InvocationTargetException;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;
import org.apache.commons.beanutils.converters.SqlTimestampConverter;

public class MyBeanUtils {

	//使用apache提供的jar包，根据一个对象，然后将页面获得的所有属性值都进行转换后，赋值给当前对象
	public static <T>T populate( T entity, Map<String,String[]> params ){
		try {
			//用来处理日期问题
			DateConverter dc = new DateConverter();
			SqlTimestampConverter stc = new SqlTimestampConverter();
			dc.setPattern("yyyy-MM-dd");
			stc.setPattern("yyyy-MM-dd HH:mm:ss");
			ConvertUtils.register(dc, java.util.Date.class);
			ConvertUtils.register(stc, java.sql.Timestamp.class);
			//通过populate 将然后将页面获得的所有属性值都进行转换后，赋值给当前对象
			BeanUtils.populate(entity, params);
		} catch (IllegalAccessException | InvocationTargetException e) {
			System.out.println("调用的方法是private修饰的");
			e.printStackTrace();
		}
		return entity;
	}
	//给我一个类的类型 ，然后将页面获得的所有属性值都进行转换后，赋值给当前类型的对象
	//方法重载， 同一个类内  方法名一致， 参数类型-个数-顺序-类型不一样
	public static <T>T populate( Class<T> clazz, Map<String,String[]> params){
		T entity = null;
		try {
			DateConverter dc = new DateConverter();
			SqlTimestampConverter stc = new SqlTimestampConverter();
			dc.setPattern("yyyy-MM-dd");
			stc.setPattern("yyyy-MM-dd  HH:mm:ss");
			ConvertUtils.register(dc, java.util.Date.class);
			ConvertUtils.register(stc, java.sql.Timestamp.class);
			//通过反射创建一个对象
			entity = clazz.newInstance();
			//通过populate 将然后将页面获得的所有属性值都进行转换后，赋值给当前对象
			BeanUtils.populate(entity, params);
		} catch (IllegalAccessException | InvocationTargetException e) {
			System.out.println("调用的方法是private修饰的");
			e.printStackTrace();
		} catch (InstantiationException e) {
			System.out.println("该类是一个抽象类或接口时,抛出该异常");
			e.printStackTrace();
		}
		return entity;
	}
}
